/*---------------------------------------------------------------------
 * File name: hal_spi.h
 *
 * Copyright (c) <2020-2022>, <ChenLong>
 *
 * All rights reserved.
 *
 * Author: ChenLong
 * Email: worldlong@foxmail.com
 *--------------------------------------------------------------------*/
#pragma once
/*
*/
#include "spi.h"
/*
*/
//SPI1 MOSI
#define SPI1_MOSI_PIN_0 (GPIO_A|GPIO_PIN_7|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define SPI1_MOSI_PIN_1 (GPIO_B|GPIO_PIN_5|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
//SPI1 MISO
#define SPI1_MISO_PIN_0 (GPIO_A|GPIO_PIN_6|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define SPI1_MISO_PIN_1 (GPIO_B|GPIO_PIN_4|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
//SPI1 SCK
#define SPI1_SCK_PIN_0 (GPIO_A|GPIO_PIN_5|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define SPI1_SCK_PIN_1 (GPIO_B|GPIO_PIN_3|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)

//SPI2 MOSI
#define SPI2_MOSI_PIN_0 (GPIO_B|GPIO_PIN_15|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
//SPI2 MISO
#define SPI2_MISO_PIN_0 (GPIO_B|GPIO_PIN_14|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
//SPI2 SCK
#define SPI2_SCK_PIN_0 (GPIO_B|GPIO_PIN_13|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define SPI2_SCK_PIN_1 (GPIO_F|GPIO_PIN_9|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define SPI2_SCK_PIN_2 (GPIO_F|GPIO_PIN_10|GPIO_MODE_AF5|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)

//SPI3 MOSI
#define SPI3_MOSI_PIN_0 (GPIO_B|GPIO_PIN_5|GPIO_MODE_AF6|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define SPI3_MOSI_PIN_1 (GPIO_C|GPIO_PIN_12|GPIO_MODE_AF6|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
//SPI3 MISO
#define SPI3_MISO_PIN_0 (GPIO_B|GPIO_PIN_4|GPIO_MODE_AF6|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define SPI3_MISO_PIN_1 (GPIO_C|GPIO_PIN_11|GPIO_MODE_AF6|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
//SPI3 SCK
#define SPI3_SCK_PIN_0 (GPIO_B|GPIO_PIN_3|GPIO_MODE_AF6|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)
#define SPI3_SCK_PIN_1 (GPIO_C|GPIO_PIN_10|GPIO_MODE_AF6|GPIO_TYPE_PPU|GPIO_SPEED_MEDIUM|GPIO_EXTI_NONE)

/*
*/
class HAL_SPI : public hal::SPI
{
public:
  HAL_SPI() :
    SPI()
  {}
  
  bool init(uint32_t cfg0);
  bool config(uint32_t cfg0);
  bool set_brp(uint32_t brp);
  int transfer(uint8_t *tx_buffer, uint8_t *rx_buffer, uint32_t num);
  int read(uint8_t *buffer, uint32_t num);
  int write(uint8_t *buffer, uint32_t num);
};



